package com.wn.framework.ext

import android.app.Activity
import android.content.Context
import android.view.View
import android.view.WindowManager
import android.view.inputmethod.InputMethodManager
import androidx.activity.ComponentActivity
import androidx.annotation.LayoutRes
import androidx.databinding.DataBindingUtil
import androidx.databinding.ViewDataBinding
import androidx.lifecycle.LifecycleOwner

/**
 * @Author: wn
 * @Date: 2024/8/20 16:59
 * @Description: Activity 的 扩展 函数 , 属性
 */
/*
 * Activity中使用DataBinding时setContentView的简化
 * layout 布局文件
 * return 返回一个 dataBinding 的对象实例
 * @LayoutRes 可以检测是否是资源布局
 * */
fun <T : ViewDataBinding> Activity.viewDataBind(@LayoutRes layout: Int): T =
  DataBindingUtil.setContentView(this, layout)

/*
* 界面Activity的沉浸式状态栏，使得可以在状态栏里面显示部分需要的图片
* 注意：需要在setContentView之前调用该函数才生效
* R 30  当版本大于  30时
* */
fun Activity.immediateStatusBar() {
  window.apply {
    addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN)
    addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
    addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
    decorView.systemUiVisibility =
      View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
  }
}

/*
* 软键盘的隐藏
* view 事件控件view
* */
fun Activity.dismissKeyBoard(view: View) {
  val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as? InputMethodManager?
  imm?.hideSoftInputFromWindow(view.windowToken, 0)
}

/*
* 扩展lifeCycleOwner属性，便于和Fragment之间使用lifecycleOwner的时候保持参数一致性
* */
val ComponentActivity.viewLifeCycleOwner: LifecycleOwner
  get() = this